/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mips;

import componentes.basicos.Palavra;
import componentes.mips.Instrucao;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Classe para realizar a leitura das intruções que estão em arquivo no formato
 * de texto.
 * 
 * @author Antonio J. L. Batista, Edurado E. Braga, Wagner S. Santos.
 */
public class LeArquivoInstrucoes {
    
    // Atributos da Classe.
    private Scanner arquivo;                
    private ArrayList<Palavra> instrucoes;  
    private ArrayList<String>tipos;
    
    private ArrayList<String> minemonicos;
    
    // Construtor da Classe
    /**
     * @param nomeDoArquivo Diretório completo do arquivo. 
     */
    public LeArquivoInstrucoes(String nomeDoArquivo) {
        
        // Abertura do arquivo de dados.
        try {
            arquivo = new Scanner(new File(nomeDoArquivo));
            instrucoes = new ArrayList<Palavra>();
            tipos = new ArrayList<String>();
            minemonicos = new ArrayList<String>();
        } catch (FileNotFoundException ex) {
            System.out.println("Arquivo nao Encontrado!");
        }
        
    }
    
    // Metodo para a leitura dos dados do arquivo.
    /**
     * Método para a leitura das informações contidas no
     * arquivo.
     * 
     * Este método faz a leitura de todas as intruções contidas em 
     * um arquivo texto.
     * 
     */
    public void readFile() {
        
        String linha;
        minemonicos.add("Instrucoes a serem executadas:");
        
        // Enquanto houver linhas a serem lidas no arquivo.
        while(arquivo.hasNextLine()) {
            
            
            linha = arquivo.nextLine();
            if( !linha.isEmpty() && linha.charAt(0) != '#') {
                System.out.println(linha);
                minemonicos.add(linha);
                Palavra p = Instrucao.getPalavra(linha);
                instrucoes.add(p);
                tipos.add(Instrucao.getTipo());
            }
            
        } // Fim do while. 
        
        minemonicos.add("------------------------------------------------------------------");
        
    } // Fim do metodo.
    
    /**
     * Método que terrnar uma lista de Palavras que corresponde as instruções lidas.
     * @see Palavra
     * @return Lista de Palavras correspondentes a cada instrução luda.
     */
    public ArrayList<Palavra> getInstrucoes() {
        
        return instrucoes;        
    }

    /**
     * Retorna uma lista de string com a representação do tipo de cada instrução.
     * @return Lista de string do tipo de cada instrução
     */
    public ArrayList<String> getTipos() {
        return tipos;
    }

    /**
     * Retorna uma lista com os minemonicos de cada instrução.
     * @return Lista de string com a representação dos minemonicos das instruções.
     */
    public ArrayList<String> getMinemonicos() {
        return minemonicos;
    }
    
} // Fim da classe

